package 多态.多态实现条件;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-16
 * Time: 20:10
 */

/*
在Java中要实现多态，必须要满足如下几点，缺一不可：
    1. 必须在继承体系下
    2. 子类必须要对父类中的方法进行重写
    3. 通过父类的引用调用重写的方法

多态体现：在代码运行时，当传递不同的类的对象时，会调用对应类的方法。
 */
public class AnimalTest {
    /**
     *编译器在编译代码的时候，并不知道要调用Dog还是Cat中的eat的方法
     *等程序运行起来的时候，形参a引用的具体对象确定后，才知道调用哪个方法
     *注意：此处的形参必须是父类类型才可以
     * @param animal
     */
    public static void  eat(Animal animal) {
        animal.eat();
    }
    public static void main(String[] args) {
        Dog dog = new Dog("旺财", 10);
        Cat cat = new Cat("咪咪", 12);

        eat(dog);
        eat(cat);
    }
}

/*
执行结果：
旺财吃狗粮
咪咪吃猫粮
 */

/*
在上述代码中, 分割线上方的代码是 类的实现者 编写的, 分割线下方的代码是 类的调用者 编写的。
当类的调用者在编写 eat 这个方法的时候, 参数类型为 Animal (父类), 此时在该方法内部并不知道, 也不关注当前的
a 引用指向的是哪个类型(哪个子类)的实例. 此时 a这个引用调用 eat方法可能会有多种不同的表现(和 a 引用的实例
相关), 这种行为就称为 多态。
 */
